<?php
/**
 * 命令参数
 * 
 * @version $Id: ICommandParameter.php 312 2008-04-23 16:29:38Z iwind $
 * @package net.4kiki.cli
 */
class ICommandParameter extends IObject {
	private $options = array();
	private $alias = array();
	private $description;
	private $name;
	private $value;
	private $optional = false;
	
	/**
	 * 构造器
	 *
	 * @param string $name 参数名
	 * @param string $description 参数描述
	 * @param boolean $optional 是否可选
	 */
	public function __construct($name, $description = null, $optional = false) {
		$this->setName($name);
		$this->setDescription($description);
		$this->setOptional($optional);
	}
	
	/**
	 * 添加选项
	 *
	 * @param ICommandOption $option 选项
	 */
	public function addOption(ICommandOption $option) {
		$options = func_get_args();
		foreach ($options as $option) {
			if (is_object($option) && get_class($option) == "ICommandOption") {
				$this->options[$option->getName()] = $option;
			}
		}
	}
	
	/**
	 * 设置同义参数
	 *
	 * @param ICommandParameter $parameter 参数
	 */
	public function alias(ICommandParameter $parameter) {
		$this->alias[] = $parameter;
	}
	
	/**
	 * 取得已经在命令中定义的选项列表
	 *
	 * @return array
	 */
	public function getDefinedOptions() {
		$options = array();
		foreach ($this->options as $option) {
			if ($option->isDefined()) {
				$options[] = $option;
			}
		}
		return $options;
	}
	
	/**
	 * 取得描述
	 *
	 * @return string
	 */
	public function getDescription() {
		return $this->description;
	}
	
	/**
	 * 取得名称
	 *
	 * @return unknown
	 */
	public function getName() {
		return $this->name;
	}
	
	/**
	 * 取得所有选项
	 *
	 * @return array
	 */
	public function getOptions() {
		return $this->options;
	}
	
	/**
	 * 根据名称取得选项
	 *
	 * @param string $optionName 选项名
	 * @return ICommandOption
	 */
	public function getOption($optionName) {
		if (isset($this->options[$optionName])) {
			return $this->options[$optionName];
		}
		return null;
	}
	
	/**
	 * 得到参数的值
	 *
	 * @return string
	 */
	public function getValue() {
		return $this->value;
	}
	
	/**
	 * 是否可选
	 *
	 * @return boolean
	 */
	public function isOptional() {
		return $this->optional;
	}
	
	/**
	 * 设置描述
	 *
	 * @param string $description 描述文字
	 */
	public function setDescription($description) {
		$this->description = $description;
	}
	
	/**
	 * 设置名称
	 *
	 * @param string $name 名称
	 */
	public function setName($name) {
		$this->name = $name;
	}
	
	/**
	 * 设置是否可选
	 *
	 * @param boolean $optional 是否可选
	 */
	public function setOptional($optional) {
		$this->optional = (boolean)$optional;
	}
	
	/**
	 * 设置值
	 *
	 * @param string $value 值
	 */
	public function setValue($value) {
		$this->value = $value;
	}
}

?>